﻿/*
*┌────────────────────────────────────────────────┐
*│　描    述：API 容器包含ApiGroupModel集合
*│  部    门：Faker开发团队
*│　作    者：static残影                                              
*│　版    本：1.0                                              
*│　创建时间：2020.12.01                        
*└────────────────────────────────────────────────┘
*/
using Microsoft.OpenApi.Models;
using System.Collections.Generic;
using System.Linq;

namespace Faker.AbpSolution.Swagger.Models
{
    public static class ApiContainer
    {
        /// <summary>
        /// API模型分组静态常量
        /// </summary>
        public static ICollection<APiGroupModel> Container { get; set; }

        
        /// <summary>
        /// 添加新的的配置分组到容器中
        /// </summary>
        /// <param name="Name">配置名称</param>
        /// <param name="Title">配置标题</param>
        /// <param name="Version">版本名称</param>
        /// <param name="Description">描述信息</param>
        /// <returns></returns>
        public static bool Add(string Name, string Title, string Version = "", string Description = "") 
        {
            //判断这个Name是否存在
            if (Container.Any(x => x.Name == Name)) {
                // 如果已经存在这个Name的集合则返回
                return false;
            }
            // 版本名称默认为Name名称
            Version = string.IsNullOrEmpty(Version)? Name: Version;
            Container.Add(new APiGroupModel
            {
                Name = Name,
                OpenApiInfo = new OpenApiInfo
                {
                    Title = Title,
                    Version = Version,
                    Description = Description
                }
            });
            return true;
        }

        /// <summary>
        /// 初始化容器，每次初始化都会清空容器数据
        /// </summary>
        public static void InitContainer()
        {
            Container = new List<APiGroupModel>();
            ApiContainer.Add(SwaggerConst.Default, "默认模块");
            ApiContainer.Add(SwaggerConst.Manager, "管理后台");
            ApiContainer.Add(SwaggerConst.Client, "客户端");
            ApiContainer.Add(SwaggerConst.Extend, "扩展模块");
            ApiContainer.Add(SwaggerConst.Plugins, "插件模块");
        }
    }
}
